import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author GAX
 * @date 2025-09-02
 */

public class SaleTicketDemo {
    // 卖票程序：三个售票员，卖 50 张票
    // 三要素：线程，操作，资源类；其中操作是由资源类提供好的，体现了内聚性，线程是朝着资源类操作的
    public static void main(String[] args) {
        Ticket ticket = new Ticket();
        new Thread( () -> {for (int i = 0; i < 50; i++) ticket.sale();},"线程 A").start();
        new Thread( () -> {for (int i = 0; i < 50; i++) ticket.sale();},"线程 B").start();
        new Thread( () -> {for (int i = 0; i < 50; i++) ticket.sale();},"线程 C").start();
    }
}

// ① 创建资源类：类包括属性和方法
class Ticket{
    private int number = 50;
    // ② 操作：售票操作作为资源类的方法，内聚在资源类中，体现了面向对象中的内聚性
    public synchronized void sale() {
        if (number > 0) {
            System.out.println(Thread.currentThread().getName() + "\t"
                    +"卖出第：" + (number --) + "\t"
                    + "还剩下：" + number);
            // 暂停毫秒
            try {TimeUnit.MILLISECONDS.sleep(200);} catch (InterruptedException e) { e.printStackTrace();};
        }
    }
}